package pe.com.cotelasa.common.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import pe.com.cotelasa.common.dao.excepcion.DAOException;

public interface IDao<Entidad, PK extends Serializable> {

    public void insertar(final Entidad entidad) throws DAOException;
    
    public void insertarColeccion(List<Entidad> listaEntidad) throws DAOException;
        
    public PK insert(final Entidad entidad) throws DAOException;
    
    public void actualizar(Entidad entidad) throws DAOException;
    
    public void actualizarColeccion(List<Entidad> listaEntidad) throws DAOException;

    public void eliminar(final Entidad entidad) throws DAOException;
    
    public void eliminarColeccion(List<Entidad> listaEntidad) throws DAOException;

    public Collection<Entidad> listarTodos(final Class<Entidad> clase) throws DAOException;
    
    public Collection<Entidad> listarActivos(final Class<Entidad> clase) throws DAOException;
    
    public Entidad obtenerEntidadPorId(Class<Entidad> clase, Serializable id) throws DAOException;
    
    public PK conseguirUltimoId(Class<Entidad> clase) throws DAOException;
    
    public Collection<Entidad> obtenerColeccionEntidadPorFiltros(Class<Entidad> clase,Map<String,Object> parametros)throws DAOException;
    public Collection<Entidad> obtenerColeccionEntidadPorFiltros(Class<Entidad> clase,Map<String,Object> parametros,String campoOrdenar,String tipo)throws DAOException;
    
    public Collection<Entidad> obtenerColeccionCacheEntidadPorFiltros(Class<Entidad> clase,Map<String,Object> parametros)throws DAOException;
        
    
   
}
